package com.zw.a.basic.a06.demo11_animal;

//动物类案例测试类.
/*
    多态的好处:
        提高了代码的扩展性.

    多态的弊端:
        父类引用不能直接使用子类的特有成员.

        如何解决上述的问题?
            通过向下转型解决,
            即: 多态形式的创建对象的操作 -> 转变成 普通的创建对象的操作. .
 */
public class AnimalTest {
    public static void main(String[] args) {
        //1 多态形式的创建猫类对象
        Animal an = new Cat();
        //2. 演示多态的弊端.
        an.eat();               //编译看左 运行看右.

        //3. 升级功能: 尝试通过多态版的 猫类对象, 调用猫类中独有的 catchMouse()功能.
        //an.catchMouse();      //这样做不行, 因为an是Animal动物类的引用, 我们不能说  动物会抓老鼠

        //4. 通过向下转型, 把 多态版的 猫类对象 ->  Cat类型的猫类对象.
        Cat c = (Cat)an;          //引用类型的: 向下转型,     即: 大 -> 小.
        c.catchMouse();
        //int a = (int)10.3;        基本类型的: 强制类型转换, 即: 大 -> 小.
    }
}
